<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUserGroupJoinRequestsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //用户加入团队的申请需求表

        //用户加入团队的申请需求
        //志愿者需要加入一个志愿者团队也是这个表
        //远期，志愿者加入团队有几种方式，类似QQ一样，团队也可以选择不限制，需要管理员验证，不放开加入几种类型
        Schema::create('user_group_join_requests', function (Blueprint $table) {
            $table->bigIncrements('id')->unsigned();

            $table->bigInteger('user_id')->unsigned()->comment('志愿者用户id');
            $table->foreign('user_id')->references('id')->on('users');

            $table->integer('activity_id')->unsigned()->comment('关注的活动id');
            $table->foreign('activity_id')->references('id')->on('activities');

            //申请时间，申请的时间
            $table->dateTime('request_time')->nullable()->comment('申请时间');
            $table->string('request_reason', 200)->nullable()->comment('申请理由');
            //志愿者团队主管人员审核处理的时间
            $table->dateTime('process_time')->nullable()->comment('处理时间');
            //志愿者团队主管人员审核处理的处理结果，只有两种可能，不通过（0），通过（1）
            //如果不通过，需要说明拒绝原因，此时志愿者并未加入团队，后面志愿者可以再次申请加入该团队，产生新的申请记录
            //如果审核通过的话，志愿者将加入本团队，并且无法再次申请加入该团队
            //        数据逻辑：创建group_users的数据记录，然后管理员需要把他加到某个用户的role里
            $table->tinyInteger('process_result')->default(0)->nullable()->comment('处理结果：0=不通过，1=通过');
            $table->string('deny_reason', 200)->nullable()->comment('不通过的原因');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('user_group_join_requests', function ($table) {
            $table->dropForeign(['activity_id']);
            $table->dropForeign(['user_id']);
        });
        Schema::dropIfExists('user_group_join_requests');
    }
}
